package cn.tedu.baking.filter;

import cn.tedu.baking.pojo.vo.UserVO;

import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;

/**
 * 用于处理拦截 /admin.html 页面时 登录的校验
 * @WebFilter 标记当前类 是过滤器类
 * filterName 用于设置过滤器的名字
 * urlPatterns 用来指定拦截的路径
 */
@WebFilter(filterName = "loginFilter",urlPatterns = "/admin.html" )
public class LoginFilter implements Filter {
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        //ServletRequest 是  请求的接口  对应需要使用实现类HttpServletRequest 该实现类可以拿到请求中的信息
        //ServletResponse 是 响应的接口  对应需要使用实现类HttpServletResponse 该实现类可以发送响应的信息
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        HttpSession session = request.getSession();//1.先通过请求 拿到session对象
        UserVO userVO = (UserVO) session.getAttribute("user");
        //2.判断session对象中是否保存有用户的记录
        if(userVO == null){//3.如果没有   响应一个页面 给客户端 (登录的页面)
            response.sendRedirect("/login.html");
            return;
        }
        //如果有
        //filterChain 存储的是请求与响应中的调用链路信息  如果用户登录,可以直接访问目标资源
        filterChain.doFilter(servletRequest, servletResponse);//继续访问资源.
    }
}
